"""
======================
Author: 柠檬班-小简
Time: 2022/10/26 21:25
Project: day6_framwork_V3
Company: 湖南零檬信息技术有限公司
======================
"""
from loguru import logger
from jsonpath import jsonpath
from tools.global_data import Data


def extract_value_from_resp_and_set_globaldata(resp_dict, jsonpath_str,share_obj):
    """
    利用jsonpath表达式，从响应当中提取对应的值，并设置为全局变量Data类的类属性。
    :param resp_dict: 接口请求的响应结果，字典类型。
    :param jsonpath_str: 从excel用例文件当中读取出来的，jsonpath提取表达式，字典格式。
                          {全局变量名: jsonpath表达式， 全局变量名: jsonpath表达式}
    :return: 无。
    """
    logger.info("要从响应结果当中，提取数据......")
    # 将字符串类型转换成字典
    jsonpath_dict = eval(jsonpath_str)
    # 转成字典 ，并且遍历。
    for key, jsonpath_expr in jsonpath_dict.items():
        logger.info(f"全局变量的key:{key}")
        logger.info(f"jsonpath对应的提取表达式是：{jsonpath_expr}")
        # 根据jsonpath表达式，从响应结果当中，提取对应的值。
        # 注意：如果提取到了值，返回的是列表。如果没有是False
        value_list = jsonpath(resp_dict, jsonpath_expr)
        logger.info(f"提取结果：{value_list}")
        if value_list:
            # 设置为全局变量类Data类-对象的实例属性。
            setattr(share_obj, key, str(value_list[0]))
            logger.info(f"给全局变量Data类设置全局变量名{key}的值为{value_list[0]}")